﻿Imports OpenDelib.ServiceContacts

Public Class LienEntrepriseContact
    Inherits OpenDelibPage

    Public Property ModeFiche As Tools.ModeFiche
        Get
            Return CType(ViewState("mode_fiche"), Tools.ModeFiche)
        End Get
        Private Set(value As Tools.ModeFiche)
            ViewState("mode_fiche") = value
        End Set
    End Property
    Public Property Lien As LienContactEntreprise
        Get
            Return CType(ViewState("lien"), LienContactEntreprise)
        End Get
        Private Set(value As LienContactEntreprise)
            ViewState("lien") = value
        End Set
    End Property
    Public Property AncienneFonction As String
        Get
            Return CType(ViewState("ancienne_fonction"), String)
        End Get
        Private Set(value As String)
            ViewState("ancienne_fonction") = value
        End Set
    End Property

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Odyssee.WebControles.JQPopupPanel.SetCancelScript(Me.btnAnnuler, False)
        Me.CtrlAdresse.Initialiser()


        ' Lecture et prise en charge des paramètres de l'URL
        ' ------------------------------------------------------------------

        If Request.QueryString("cleContact") = "" Then
            Me.NotifyErreur("Contact obligatoire !")
            Return
        ElseIf Not IsNumeric(Request.QueryString("cleContact")) Then
            Me.NotifyErreur("Contact '" & Request.QueryString("cleContact") & "' non valide !")
            Return
        End If
        If Request.QueryString("cleEntreprise") = "" Then
            Me.NotifyErreur("Entreprise obligatoire !")
            Return
        End If

        If Not IsPostBack Then
            If (Request.QueryString("fonction") = "") Then
                Me.ModeFiche = Tools.ModeFiche.Creation

                ' Initialisation du lien
                Lien = New LienContactEntreprise()
                Lien.Adresse = New Adresse
                Lien.Authentication = New AuthenticationParameters
                Lien.Authentication.Token = Tools.GetInstance.getToken
                Lien.CleContact = CInt(Request.QueryString("cleContact"))
                Lien.CleEntreprise = Server.UrlDecode(Request.QueryString("cleEntreprise"))
                Lien.ZoneSup = New ZoneSup

                ' Lecture des informations du contact
                Using svc As New ContactsClient
                    Dim criteres As New CriteresRechercheContact
                    criteres.Authentication = New AuthenticationParameters
                    criteres.Authentication.Token = Tools.GetInstance.getToken
                    criteres.Cle = Lien.CleContact

                    Try
                        Dim results As ResultatRechercheContact = svc.Recherche(criteres)
                        If results Is Nothing OrElse Not results.OK OrElse results.Contacts.Count = 0 Then
                            NotifyErreur("Impossible de charger les informations du contact n°" & Lien.CleContact & If(results Is Nothing, ".", " :" & ControlChars.NewLine & results.ErrorMessage))
                            Return
                        Else
                            Lien.Nom = results.Contacts(0).Nom
                            Lien.Prenom = results.Contacts(0).Prenom
                            Lien.Qualite = results.Contacts(0).Qualite
                        End If
                    Catch ex As Exception
                        NotifyErreur(ex.Message)
                        Return
                    End Try
                End Using
            Else
                Me.ModeFiche = Tools.ModeFiche.Modification

                ' Lecture du lien
                Using svc As New ContactsClient
                    Dim params As New ParametresLectureLienContactEntreprise
                    params.Authentication = New AuthenticationParameters
                    params.Authentication.Token = Tools.GetInstance.getToken
                    params.CleContact = CInt(Request.QueryString("cleContact"))
                    params.CleEntreprise = Server.UrlDecode(Request.QueryString("cleEntreprise"))
                    params.Fonction = Server.UrlDecode(Request.QueryString("fonction"))

                    Try
                        Dim results As ResultatListeLiensContactEntreprise = svc.LectureLiensContactEntreprise(params)
                        If results Is Nothing OrElse Not results.OK OrElse results.Liens.Count = 0 Then
                            NotifyErreur("Impossible de charger les informations du lien entre le contact n°" & params.CleContact & " et l'entreprise '" & params.CleEntreprise & "' pour la fonction '" & params.Fonction & "'" & If(results Is Nothing, ".", " :" & ControlChars.NewLine & results.ErrorMessage))
                            Return
                        Else
                            Lien = results.Liens(0)
                            AncienneFonction = Lien.CodeFonction
                        End If
                    Catch ex As Exception
                        NotifyErreur(ex.Message)
                        Return
                    End Try
                End Using
            End If


            ' Chargement des paramètres
            ' ------------------------------------------------------------------

            Using svc As New ServiceParametre.ParametresClient
                Dim result As String

                ' Fonctions
                result = Tools.LoadParametersCombo(cmbFonction, "fonctions", 14, , , New ListItem("", ""), , svc)
                If result <> "" Then
                    NotifyErreur(result)
                    Return
                End If

                ' Types de choix de l'adresse
                result = ChargerTypesChoixAdresse(svc)
                If result <> "" Then
                    NotifyErreur(result)
                    Return
                End If
            End Using


            ' Chargement des champs de la page
            ' ------------------------------------------------------------------

            Me.txtContact.Text = Me.Lien.Qualite & " " & Me.Lien.Nom & If(Me.Lien.Prenom = "", "", " " & Me.Lien.Prenom)
            Me.txtEntreprise.Text = Me.Lien.CleEntreprise

            If Me.ModeFiche = Tools.ModeFiche.Modification Then
                Me.cmbFonction.SelectedValue = Me.Lien.CodeFonction
                Me.txtRemarques.Text = Me.Lien.Remarques
                Me.CtrlAdresse.AffecterValeurs(Me.Lien.Adresse)
                Me.txtEMail.Text = Me.Lien.EMail
                Me.cmbChoixAdresse.SelectedValue = CInt(Me.Lien.TypeChoixAdresse).ToString
            End If
        End If
    End Sub

    Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click
        If Me.cmbFonction.SelectedValue = "" Then
            NotifyErreur("La fonction est obligatoire !")
            SetFocus(Me.cmbFonction)
        End If

        ' Affectation des valeurs saisies
        Me.Lien.AncienneFonction = Me.AncienneFonction
        Me.Lien.CodeFonction = Me.cmbFonction.SelectedValue
        Me.Lien.TypeLien = TypeLienEntrepriseContact.IntraEntreprise
        Me.Lien.Remarques = Me.txtRemarques.Text
        Me.CtrlAdresse.RecupererValeurs(Me.Lien.Adresse)
        Me.Lien.EMail = Me.txtEMail.Text
        Me.Lien.TypeChoixAdresse = CType(CInt(Me.cmbChoixAdresse.SelectedValue), TypeChoixAdresseLienContactEntreprise)

        ' Vérification de la commune
        If Not Me.CtrlAdresse.ValiderCommune() Then Return

        ' Création ou modification du lien
        Using svc As New ContactsClient
            Dim params As New ParametresLienContactEntreprise
            params.Authentication = New AuthenticationParameters
            params.Authentication.Token = Tools.GetInstance.getToken
            params.Lien = Me.Lien

            Try
                Dim results As OperationResult = Nothing
                If Me.ModeFiche = Tools.ModeFiche.Creation Then
                    results = svc.AjouterLienContactEntreprise(params)
                ElseIf Me.ModeFiche = Tools.ModeFiche.Modification Then
                    results = svc.ModifierLienContactEntreprise(params)
                Else
                    Return
                End If

                If results Is Nothing OrElse Not results.OK Then
                    NotifyErreur("Impossible de créer ou modifier le lien entreprise / contact" & If(results Is Nothing, ".", " :" & ControlChars.NewLine & results.ErrorMessage))
                    Return
                End If
            Catch ex As Exception
                NotifyErreur(ex.Message)
                Return
            End Try
        End Using

        ' Fermeture de la popup
        ScriptManager.RegisterStartupScript(Me, Me.GetType, "FermeturePopup", Odyssee.WebControles.JQPopupPanel.CreateOKScript("OK"), True)
    End Sub

    Public Function ChargerTypesChoixAdresse(svc As ServiceParametre.ParametresClient) As String
        Dim params As New ServiceParametre.OperationParameters
        params.Authentication = New ServiceParametre.AuthenticationParameters
        params.Authentication.Token = Tools.GetInstance.getToken

        Dim msg As String = ""
        Try
            Dim results As ServiceParametre.OIItemListResult = svc.ListeTypesChoixAdresseLienContactEntreprise(params)
            If results Is Nothing OrElse Not results.OK Then
                msg = "Impossible de charger les types de choix de l'adresse" & If(results Is Nothing, ".", " :" & ControlChars.NewLine & results.ErrorMessage)
            Else
                Tools.LoadParametersCombo(results.Liste, Me.cmbChoixAdresse)
            End If
        Catch ex As Exception
            msg = ex.Message
        End Try

        Return msg
    End Function

End Class